/*
 *  Copyright 2012 yura.
 * 
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 * 
 *       http://www.apache.org/licenses/LICENSE-2.0
 * 
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *  under the License.
 */

package org.opu.nlp.pos.rnc_corpus.beans;

/**
 *
 * @author yura
 */
public class GrammaticalLabel implements HasText, HasAttributes, Verifiable {

    public static final String GR = "gr";
    public static final String JOINED = "joined";
    public static final String LEX = "lex";

    public static enum JoinedType {
        together, hyphen
    }

    private String initialForm;

    private String grammaticalFeatures;

    private JoinedType joined;

    private String text;

    @Override
    public void verify() throws IllegalArgumentException {
        if (initialForm == null) {
            throw new IllegalArgumentException("lex attribute expect in tag ana");
        }
        if (grammaticalFeatures == null) {
            throw new IllegalArgumentException("gr attribute expect in tag ana");
        }
        if (text == null) {
            throw new IllegalArgumentException("text expect in tag ana");
        }
    }

    @Override
    public void setAttribute(String name, String value) throws IllegalArgumentException {
        if (LEX.equals(name)) {
            initialForm = value;
        } else if (GR.equals(name)) {
            grammaticalFeatures = value;
        } else if (JOINED.equals(name)) {
            joined = JoinedType.valueOf(value);
        } else {
            throw new IllegalArgumentException("For ana tag attribute " + name
                    + " does not support!");
        }
    }

    public String getGrammaticalFeatures() {
        return grammaticalFeatures;
    }

    public void setGrammaticalFeatures(String grammaticalFeatures) {
        this.grammaticalFeatures = grammaticalFeatures;
    }

    public String getInitialForm() {
        return initialForm;
    }

    public void setInitialForm(String initialForm) {
        this.initialForm = initialForm;
    }

    public JoinedType getJoined() {
        return joined;
    }

    public void setJoined(JoinedType joined) {
        this.joined = joined;
    }

    public String getText() {
        return text;
    }

    @Override
    public void setText(String text) {
        this.text = text;
    }
}
